<?php

namespace app\api\model;

use think\Exception;
use think\Model;
use think\Db;
use think\Validate;

class Claimconfigs extends Model
{
    private static $instance = null;

    public function __construct($data = [])
    {
        parent::__construct($data);
    }

    /**
     * 2020-12-23
     * 添加配置条目传参验证
     * @param $data
     */
    public function check_set($data)
    {
        $validate = new Validate([
            'name'  => 'require|max:20',
            'file_status' => 'require',
            'desc' => 'require|max:50',
            'original_status'=>'require',
            'img_status' => 'require',
            'status' => 'require'
        ]);
        if (!$validate->check($data)) {
            $res['code'] = 1;
            $res['msg'] = $validate->getError();
            return $res;
        }
    }
    /**
     * 2020-12-22
     * 获取理赔配置项
     */

    public function get_cate()
    {
        return Db::name("claim_cate")->field('id,name,cate,icon_img')->select();
    }

    /**
     * 2020-12-22
     * 根据配置项id，获取配置详情信息列表
     * @param cate_id 配置项id
     */

    public function get_type($param)
    {
        if ($param['cate_id']=="3" && ($param['status']=="2" || $param['status']=="12"))
        {
            $type_id = '1,8,9';
        }else{
            $type_id =  Db::name("claim_cate")->where("id",$param['cate_id'])->value('type');
        }
        return Db::name("claim_type")->where("id","in",$type_id)->select();
    }

    /**
     * 2020-12-22
     * 根据配置项id，获取配置详情信息列表
     * @param cate_id 配置项id
     * @param status 1-雇主险，2-团意险
     */

    public function get_setting($param)
    {
        return Db::name("claim_setting")->where("cate_id",$param['cate_id'])->where("status",$param['status'])->order("sort asc")->select();
    }

    /**
     * 2020-12-22
     * 添加配置详细条目
     * @param cate_id 配置项id
     * @param name 名称
     * @param type 类别
     * @param desc 描述
     * @param file_status 文件类型 1-图片，2-文件
     * @param file_url 文件地址
     * @param file_name 文件模板名称
     * @param original_status 1-原件，2-复印件，3-复印件加盖公章
     * @param img_status 1-上传图片说明，2-不上传
     * @param imgs 图片
     * @param status 1-雇主险，2-团意险
     */
    public function add_setting($param)
    {
        $data = $this->check_set($param);
        if ($data['code']=="1") {
            $code = 100;
            $msg = $data['msg'];
            return array('code' => $code,'msg' => $msg);
        } else {
            $param['add_time'] = time();
            $param['sort'] = $this->get_sort($param['cate_id'],$param['status']);
            $result = Db::name("claim_setting")->insert($param);
            $code = $result ? 200 : 100;
            return array('code' => $code);
        }
    }

    /**
     * 2020-12-22
     * 获取排序sort 值
     * @param cate_id 配置项 id
     * @param status 1-雇主险，2-团意险
     */
    public function get_sort($cate_id,$status)
    {
        $count = count(Db::name("claim_setting")->where("cate_id",$cate_id)->where("status",$status)->select());
        return $count+1;
    }

    /**
     * 2020-12-22
     * 配置详情信息单条详情 编辑/查看
     * @param id   条目详情id
     */
    public function setting_detail($param)
    {
        return Db::name("claim_setting")->where("id",$param['id'])->find();
    }

    /**
     * 2020-12-22
     * 修改配置详情单条详情
     * @param id 条目id
     * *@param name 名称
     * @param type 类别
     * @param desc 描述
     * @param file_status 文件类型 1-图片，2-文件
     * @param file_url 文件地址
     * @param file_name 文件模板名称
     * @param original_status 1-原件，2-复印件，3-复印件加盖公章
     * @param img_status 1-上传图片，2-不上传
     */
    public function edit_setting($param)
    {
        $id = $param['id'];
        unset($param['id']);
        $data = $this->check_set($param);
        if ($data['code']=="1") {
            $code = 100;
            $msg = $data['msg'];
            return array('code' => $code,'msg' => $msg);
        } else {
            if($param['file_status']=="1"){
                $param['file_url']="";
                $param['file_name'] = "";
            }
            if($param['img_status']=="0"){
                $param['imgs'] = "";
            }
            $result = Db::name("claim_setting")->where('id', $id)->update($param);
            if(isset($param['type'])){
                Db::name("claim_company_setting")->where("setting_id",$id)->update(['type'=>$param['type']]);
            }
            return array("code"=>200);
        }
    }

    /**
     * 2020-12-22
     * 上移/下移系配置详情条目
     * @param id 条目id
     * @param type 1-上移，2-下移
     */

    public function change_sort($param)
    {
        $arr = Db::name("claim_setting")->where("id",$param['id'])->field("cate_id,sort,status")->find();
        if($param['type'] == "1"){
            $sort = $arr['sort']-1;
            Db::startTrans();
            try{
                $res = Db::name("claim_setting")->where("cate_id",$arr['cate_id'])->where("status",$arr['status'])->where("sort",$sort)->setInc("sort",1);
                if($res){
                    $result = Db::name("claim_setting")->where("id",$param['id'])->setDec("sort",1);
                } else {
                    $result = 1;
                }
                Db::commit();
            } catch (Exception $e) {
                Db::rollback();
            }
        } else {
            $sort = $arr['sort']+1;
            Db::startTrans();
            try {
                $res = Db::name("claim_setting")->where("cate_id",$arr['cate_id'])->where("status",$arr['status'])->where("sort",$sort)->setDec("sort",1);
                if($res) {
                    $result = Db::name("claim_setting")->where("id",$param['id'])->setInc("sort",1);
                } else {
                    $result = 1;
                }
                Db::commit();
            } catch (Exception $e) {
                Db::rollback();
            }
        }
        if($result==1){
            return array("code"=>200);
        }
    }

    /**
     * 获取各公司理赔时间及领款
     * @param company_id
     * @param 险种 0-团意险，2-雇主险
     */

    public function claimTime($param)
    {
        return Db::name("claim_settime")->where($param)->find();
    }

    /**
     * 2020-12-23
     * 保司理赔报案时间及领款设置
     * @param $data
     */
    public function check_claim($data)
    {
        $validate = new Validate([
            'report_time'  => 'require|number',
            'communi_status' => 'require',
            'restore_time' => 'require|number',
            'second_status' => 'require',
            'hospital_level' => 'require|max:15',
            'allow_workers' => 'require',
            'company_id' => 'require',
            'status' => 'require'
        ]);
        if (!$validate->check($data)) {
            $res['code'] = 1;
            $res['msg'] = $validate->getError();
            return $res;
        }
    }

    /**
     * 2020-12-24
     * 保司理赔时间及领款设置添加/修改
     */

    public function addClaim($param)
    {
        if(isset($param['id'])) {
            $id = $param['id']; unset($param['id']);
            $result = Db::name("claim_settime")->where('id',$id)->update($param);
            die(\GuzzleHttp\json_encode(['code' => "200"]));
        } else {
            $result = Db::name("claim_settime")->insert($param);
            if($result){
                die(\GuzzleHttp\json_encode(['code' => "200"]));
            }
        }
    }
}